// mapper/StatisticsMapper_pmh.java
package com.scuec.groupfive.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface StatisticsMapper_pmh {
    /**
     * 计算最近30天的日均活跃用户数(DAU)
     *
     * 计算逻辑分两步：
     * 1. 子查询部分：
     *    - 按天(DATE(answered_at))分组统计每天的不重复活跃用户数(COUNT(DISTINCT user_id))
     *    - 其中活跃用户定义为当天有答题记录的用户
     *    - 时间范围：最近30天(answered_at >= CURRENT_DATE - 30 DAY)
     *
     * 2. 主查询部分：
     *    - 对子查询结果取平均值(AVG(daily_active_users))
     *    - 即：将30天内每天的活跃用户数相加后除以天数
     *
     * 示例：
     *    - 第一天：15个活跃用户
     *    - 第二天：18个活跃用户
     *    - ...
     *    - 第30天：12个活跃用户
     *    - DAU = (15 + 18 + ... + 12) / 30
     *
     * 注意：
     *    - 一个用户同一天多次答题仍只计为1次活跃
     *    - 自动排除没有答题记录的天数（不参与平均值计算）
     */
    @Select("SELECT AVG(daily_active_users) AS value " +
            "FROM ( " +
            "    SELECT DATE(answered_at) AS day, COUNT(DISTINCT user_id) AS daily_active_users " +
            "    FROM answer_records " +
            "    WHERE answered_at >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) " +
            "    GROUP BY day " +
            ") daily_stats")
    Double getLast30DaysDAU();

    // 保留原有人均做题量方法
    @Select("SELECT COUNT(*) / COUNT(DISTINCT user_id) AS value " +
            "FROM answer_records " +
            "WHERE answered_at BETWEEN #{startDate} AND #{endDate}")
    Double getAvgQuestionsPerUser(@Param("startDate") String startDate,
                                  @Param("endDate") String endDate);
}